Unless otherwise indicated herein, the approaches described in this section are not prior art to the claims in this application and are not admitted to be prior art by inclusion in this section.
The present invention relates to task scheduling for highly concurrent analytical and transactional workloads and, in particular, to systems and methods for task scheduling in database management systems (DBMS). Task scheduling usually involves using a number of threads to process tasks. As a thread completes one task, or otherwise becomes available, it can move to processing the next task waiting to be processed. Such scheduling systems are typically effective in leveraging the ability of modern multicore processors to process tasks in parallel. In general, a task scheduler activates a number of threads equal to the number of cores in the processor. Such conventional task schedulers avoid performance degradations associated with creating an excessive numbers of threads, such as unnecessary context switches and cache thrashing incurred by typical time-sharing policies of an operating system (OS) scheduler that attempts to balance large numbers of threads among a limited number of available cores. However, blindly bundling DBMS operations into tasks can result in sub optimal usage of computing resources, thus diminishing the overall performance of the DBMS.
One measure of the performance of a DBMS is its ability to handle an ever-increasing number of online analytical processing (OLAP) and online transactional processing (OLTP) queries over growing data sets. To increase the efficacy of the DBMS in processing multiple OLAP and OLTP queries, many systems have implemented techniques for processing the queries in parallel using multi-core processors. DBMS operations involve highly concurrent contending OLTP workloads with many blocking tasks and highly concurrent OLAP workloads that can, if left unchecked, result in the creation of excessive numbers of tasks. Simply issuing logical threads and leaving the scheduling to the OS tends to lead to higher thread creation costs and numerous context switches incurred by most OS time-sharing policies that balances a large numbers of threads among a limited number of available cores. Accordingly, implementing traditional task schedulers within a DBMS environment often results in higher task scheduling costs that can diminish overall performance.